package cn.iocoder.yudao.module.erp.service.product;

import cn.iocoder.yudao.module.erp.controller.admin.product.vo.product.ErpProductPurchaseInfoRespVO;
import cn.iocoder.yudao.module.erp.controller.admin.product.vo.product.ErpProductRespVO;
import cn.iocoder.yudao.module.erp.controller.admin.product.vo.product.ProductPurchaseInfoSaveReqVO;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductPurchaseInfoDO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;
import java.util.Map;

import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;

/**
 * ERP 产品-采购资料 Service 接口
 *
 * @author 芋道源码
 */
public interface ErpProductPurchaseInfoService {

    /**
     * 创建产品
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createProductPurchaseInfo(@Valid ProductPurchaseInfoSaveReqVO createReqVO);

    /**
     * 更新产品
     *
     * @param updateReqVO 更新信息
     */
    void updateProductPurchaseInfo(@Valid ProductPurchaseInfoSaveReqVO updateReqVO);

    /**
     * 删除产品
     *
     * @param fid 编号
     */
    void deleteProductPurchaseInfo(Long fid);

    /**
     * 校验产品们的有效性
     *
     * @param ids 编号数组
     * @return 产品列表
     */
    List<ErpProductPurchaseInfoDO> validProductPurchaseInfoList(Collection<Long> ids);

    /**
     * 获得产品
     *
     * @param id 编号
     * @return 产品
     */
    ErpProductPurchaseInfoDO getProductPurchaseInfo(Long id);

    /**
     * 获得指定状态的产品 VO 列表
     *
     * @param status 状态
     * @return 产品 VO 列表
     */
    List<ErpProductPurchaseInfoRespVO> getProductPurchaseInfoVOListByStatus(Integer status);

    /**
     * 获得产品 VO 列表
     *
     * @param ids 编号数组
     * @return 产品 VO 列表
     */
    List<ErpProductPurchaseInfoRespVO> getProductPurchaseInfoVOList(Collection<Long> ids);

    /**
     * 获得产品 VO Map
     *
     * @param ids 编号数组
     * @return 产品 VO Map
     */
    default Map<Long, ErpProductPurchaseInfoRespVO> getProductPurchaseInfoVOMap(Collection<Long> ids) {
        return convertMap(getProductPurchaseInfoVOList(ids), ErpProductPurchaseInfoRespVO::getFid);

    }

}